perm filename PFAIL.FAI[PAG,LCS]20 blob sn#598964 filedate 1981-07-12 generic text, type T, neo UTF8
00100		TITLE PFAIL; ********* OCT 78 *********
00200		INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
00300	;;	INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT,INMUS
00400	;	ENTRY LOOKF,LOOKX,LOOK,SHFTQ,SORT2,NORH,FNDEND,MINMAX
00500		ENTRY LOOKF,LOOKX,LOOK
00600		ENTRY IFIX,FLOAT
00700	;;	ENTRY IFIX,FLOAT,RCURVE
00800	;;	ENTRY PFIBX,PFIB,RLOOP,BLTEM,IFIX,FLOAT
00900	;;	ENTRY GETPTS,MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0
01100	;;	ENTRY EXCHG,EXCH,SHRNK,EXPND,CLFNUM
01200	;;	ENTRY PSHFT,ADRST,STAFF,RIGHT,RESTS,EXCHG,EXCH,SHRNK,EXPND,CLFNUM
01400		EXTERNAL .COMM.,XRN,KJY,PTR,POSI,AMOD,KNR,NNP,PX,XXX,Q,SF,LLL
01500		EXTERNAL RCLF,STF,PTMOVE,IPG,JN,RCLF,MNX,ALOG,ENDL
01600	DEFINE ERROR (MSG)
01700	<	JSA 16,.ERROR
01800		JUMP [ASCIZ/MSG/
01900	]
02000	>
02100	
02200	.ERROR:	0
02300		OUTSTR [ASCIZ/?
02400	/]				;MAKE SURE HE CAN SEE HIS ERROR
02500		OUTSTR @(16)		;OUTPUT ERROR MESSAGE
02600		CALLI 1,12		;LET USER CONTINUE
02700		JRA 16,1(16)
02800	
02900		CH←13
03000	
03100	REGS:	BLOCK 20
03200	
03300	;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .MS 
03400	LOOKF:	0
03500		MOVSI 0,'MS '
03600		JRST LOOK1
03700	LOOKX:	0
03800		MOVE	0,@1(16)
03900		MOVEM 	0,FILNAM
04000		JSA 16, INTFIQ
04100		MOVE 0,DIR
04200		JRST LOOK1
04300	LOOK:	0
04400		MOVEI	0,0
04500	LOOK1:	MOVEM	0,DIR+1
04600		MOVE	0,@(16)
04700		MOVEM 	0,FILNAM
04800		JSA 16, INTFIQ
04900		SETZM	DIR+2
05000		SETZM	DIR+3
05100		LOOKUP	CH,DIR
05200		TDZA	0,0
05300		MOVNI	0,1
05400		JRA 16,1(16)
05500	
05600	INTFIQ:	0	;INITS DSK FOR INPUT
05700		MOVEI REGS
05800		BLT REGS+3
05900		INIT CH,17
06000		SIXBIT/DSK/
06100		0
06200		HALT .-3
06300	;	ERROR <CAN'T INIT DSK!>
06400		PUSHJ 17,INTF4
06500		JRA 16,0(16)
06600	
06700	INTF4: 	MOVE 0,FILNAM#
06800		MOVEM 0,FN#
06900		MOVE 1,[POINT 7,FN]
07000	INTF3:	MOVE 2,[POINT 6,DIR]
07100		SETZM DIR
07200		MOVEI 3,5
07300	INTF1:	ILDB 0,1
07400		CAIN 0," "
07500		JRST INTF2
07600		SUBI 0,40
07700		IDPB 0,2
07800		SOJG 3,INTF1
07900	INTF2:	HRLZI REGS
08000		BLT 4
08100		POPJ 17,
08200	
08300	DIR:	BLOCK 4
08400	
08500	;SHFTQ:	0		;CALL SHFTQ(R)
08600	;	MOVE JN+1	
08700	;	SOS
08800	;	SETZ 1,
08900	;	MOVE 3,@(16)	;R
09000	;SHQ:	MOVE 2,XRN(1)
09100	;	FADRM 3,Q-1(2)
09200	;	CAMGE 1,0
09300	;	AOJA 1,SHQ
09400	;	JRA 16,1(16)
09500	
09600	;SORT2:	0		;SUBROUTINE SORT2(RPOS,M)
09700	;	MOVEI	2,2	;DIMENSION RPOS(2,200)
09800	;SO3:	MOVE	6,2	;(K=L HERE)
09900	;	SETO	11,	;L=2
10000	;	HRRZI	3,@(16)	;3	J=-1
10100	;	MOVE	4,2	;RX=RPOS(1,L-1)
10200	;	SUBI	4,1	;L-1
10300	;	IMULI	4,2
10400	;	ADDI	4,(3)
10500	;	MOVE	5,-2(4)	;RX
10600	;SO2:	MOVE 	7,6	;	DO 2 K=L,M
10700	;				;IF(RPOS(1,K).GE.RX)GO TO 2
10800	;	IMULI	7,2	;IF(RPOS(1,K).GE.RX)GO TO 2
10900	;	ADDI	7,(3)
11000	;	CAMG	5,-2(7)
11100	;	JRST	SO1	; CONTINUE
11200	;	MOVE	5,-2(7)	;  RX=RPOS(1,K)
11300	;;;C   WHY WERE ALL THE RX'S  JX ????? 9/6/73
11400	;	MOVE 	11,6	;J=K
11500	;SO1:	CAMGE	6,@1(16)	;2	CONTINUE
11600	;	AOJA	6,SO2
11700	;	JUMPL	11,SO4	;IF(J)GO TO 4
11800	;	MOVE	12,2	;K=L-1
11900	;	SOS	12
12000	;	IMULI	12,2	;(K*2)
12100	;	ADD	12,3	;CALL EXCH(RPOS(1,K),RPOS(1,J))
12200	;	MOVE	10,-2(12)
12300	;	IMULI	11,2
12400	;	ADD	11,3
12500	;	EXCH	10,-2(11)
12600	;	MOVEM	10,-2(12)
12700	;	MOVE	10,-1(12)	;CALL EXCH(RPOS(2,K),RPOS(2,J))
12800	;	EXCH	10,-1(11)
12900	;	MOVEM	10,-1(12)
13000	;SO4:	CAMGE	2,@1(16)	;4	L=L+1
13100	;	AOJA	2,SO3		;IF(L.LE.M)GO TO 3
13200	;	JRA	16,2(16)	;END
13300	
13400	;NORH:	0 		;FUNCTION NORH(KK)
13500	;	MOVE 15,@1(16);	;NOW**** FUNCTION NORH(KK,K)
13600	;	MOVE 1,XRN+=499(15)  ;FIND VALUE IN NN ARRAY IN DO LOOP.
13700	;	MOVEM 1,@(16);	;	;KK=NN(K)
13800	;	SETZ 0,
13900	;	JUMPLE 1,NOR
14000	;	CAILE 1,2;	;	;NORH=-1 IF KK≤0, >18, NOT 1,2,4,17.
14100	;	CAIN 1,4
14200	;	JRA 16,1(16)
14300	;	CAIE 1,=18;	;	;USED IN RESPC.F4
14400	;	CAIN 1,=17
14500	;	JRA 16,1(16)
14600	;NOR:	SETO 0,
14700	;	JRA 16,1(16)
14800	
14900	;FNDEND:	0		;CALL FNDEND(R)
15000	;	SETZ 1,
15100	;FA:	MOVE 2,XRN+=500(1)	;NN(K)
15200	;	JUMPLE 2,FB
15300	;	CAIG 2,3
15400	;	JRST FC
15500	;	CAIE 2,=17
15600	;	CAIN 2,=18
15700	;	SKIPA
15800	;FB:	AOJA 1,FA	;ASSUMES IT WILL ALWAYS END PROPERLY!!!
15900	;FC:	MOVN 2,XRN(1)	; MM(K)
16000	;	FADR 2,[2.0]
16100	;	FADR 2,ENDL   ;	;+ENDLN
16200	;	MOVEM 2,@(16)
16300	;	JRA 16,1(16)
16400	
16500	;MINMAX:	0	;	SUBROUTINE MINMAX(JRN)
16600	;	MOVEI 1,@(16)  ;COMMON /MNX/MIN,MAX,JT  DIM. JRN(1)
16700	;	MOVE 0,(1);	;GET FIRST VALUE OF CURRENT JRN ARRAY
16800	;	MOVE  3,
16900	;	MOVEI 2,2;	;;	MIN=10000
17000	;MM:	CAMLE 0,1(1)    	;	MAX=0
17100	;	MOVE 0,1(1)     ;;	DO 107 K=1,JT
17200	;	CAMGE 3,1(1)     ;	;;	NN=JRN(K)
17300	;	MOVE 3,1(1)    ;	;;	IF(NN.LT.MIN)MIN=NN
17400	;	AOJ 1,
17500	;	CAMGE 2,MNX+2
17600	;	AOJA 2,MM;	;107;	IF(NN.GT.MAX)MAX=NN
17700	;	MOVEM 0,MNX;	;;	END
17800	;	MOVEM 3,MNX+1
17900	;	JRA 16,1(16)
18000	
18100	;PFIBX:	0	;DATA FIB/0.618/, RFIB/-.382/,ALG/0.30103/
18200	;	;	;100;	ACCEPT 10,A   10;	FORMAT(F)
18300	;	MOVE 12,@(16);	;	;PFIBX=14
18400	;	MOVE 13,[14.0];	;	;IF(A.EQ.1)GO TO 20
18500	;	CAMN 12,[1.0];	;	;Z=FIB
18600	;	JRST PFX;	;	;IF(A.LT.1)Z=RFIB
18700	;	JSA 16,ALOG;	;	;RH=ABS(ALOG(A)/ALOG(2.0))
18800	;	JUMP 12
18900	;	FDVR 0,[0.6931472]
19000	;	MOVM 11,0
19100	;	MOVE 10,[0.618]
19200	;	SKIPG    ;	;	;L=RH
19300	;	MOVN 10,[0.382];	;	;IF(L.EQ.0)GO TO 4
19400	;	KIFIX 7,11
19500	;	MOVE 6,7;	;	;SAVE L FOR LATER
19600	;	JUMPE 6,PFZ
19700	;PF:	MOVE 2,13		;	DO 3 K=1,L
19800	;	FMPR 2,10;	;	;3;	PFIBX=PFIBX+PFIBX*Z
19900	;	FADR 13,2
20000	;	SOJG 6,PF
20100	;PFZ:	FLTR 7,7		;4	RH=RH-L
20200	;	FSBR 11,7;	;	;IF(RH.EQ.0)GO TO 20
20300	;	JUMPE 11,PFX;	
20400	;	MOVE 2,13
20500	;	FMPR 2,10
20600	;	FMPR 2,11;	;	;PFIBX=PFIBX+PFIBX*Z*RH
20700	;	FADR 13,2
20800	;PFX:	MOVE 0,13		;SEND BACK THE RESULT
20900	;	JRA 16,1(16)
21000	
21100	;PFIB:	0		;FUNCTION PFIB(P)  PSEUDO-FIBONACCI RHYTHM SPACER
21200	;	MOVN 0,@(16);	;PFIB=(P+(.125-P)*(.8+.01*P))*50
21300	;	FADR 0,[0.125];	;END
21400	;	MOVE 1,@(16)
21500	;	FMPR 1,[0.02]
21600	;	FADR 1,[0.8]
21700	;	FMPR 0,1
21800	;	FADR 0,@(16)
21900	;	FMPR 0,[50.0]
22000	;	JRA 16,1(16)
22100	
22200	;RLOOP:	0		;CALL RLOOP(A,B,K)
22300	;	HRLI 1,@1(16)	;DIMENSION A(1),B(1)  --  SOURCE
22400	;	HRRI 1,@(16)	;DO 1 J=1,K     -- DESTINATION
22500	;	MOVEI 2,@(16)    ;1	A(J)=B(J)  -- WORD COUNT
22600	;	ADD  2,@2(16)  ;LOC OF ARRAY A + WDCNT.
22700	;	BLT  1,-1(2)
22800	;	JRA 16,3(16)
22900	
23000	;BLTEM: 	0
23100	;	HRLI 1,PX	;KWDS(...)=KPN(...)  PX IS LOC. OF KPN ARRAY
23200	;	HRRI 1,PTR	;RIGHT HALF IS LOC OF KWDS ARRAY
23300	;	MOVE 2,RCLF+3	;GET NUM. OF ITEMS  (RCLF+3=ITEM)
23400	;	BLT 1,PTR(2)	; PTR(2) IS WD CNT.   (ITEM+1)
23500	;	HRLI 1,Q	;RN(...)=Q(...)
23600	;	HRRI 1,XRN
23700	;	MOVE 2,POSI+=9	;THIS IS JPQ, NUM OF WDS.
23800	;	BLT 1,XRN-1(2)
23900	;	JRA 16,0(16)
24000	
24100	IFIX:	0
24200		KIFIX 0,@(16)
24300		JRA 16,1(16)
24400	FLOAT:	0
24500		FLTR 0,@(16)
24600		JRA 16,1(16)
24700	
24800	  K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
24900	
25000	; 	SUBROUTINE GETPTS
25100	;	COMMON/KNR/N(500) /NNP/NP(500)
25200	;XXX	COMMON/XRN/RN(4000)  /KJY/ K,J
25300	;	COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
25400	;XXX	1/PTR/PWDS(250),ITEM,LL,I,IX
25500	;	EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
25600	;	1,(R6,RJQ(4))
25700	
25800	;GETPTS:	0		;CALL GETPTS(N,RN,PWDS)
25900	;	    SETZ    J,      ;       J=0
26000	;	SETZ;	K,;	;;	K=0
26100	;	MOVE ;	JJ2,POSI+=8
26200	;	KIFIX;	R2,.COMM.;	;GET THE STAFF NUM. (NEG= ALL IN THIS PROG.)
26300	;	SETZ;	X,
26400	;	MOVEI ;	M,@2(16);;	DO 1 M=1,ITEM
26500	;G1:	AOJ	X,
26600	;	MOVE;;	L,(M)
26700	;	MOVEI ;	R,@1(16);	;L=PWDS(M)
26800	;	ADDI;	R,(L);	;	;IF(RTLINE(L))GO TO 1
26900	
27000	;	JUMPL R2,G9;	;	;NEG R2=ALL STAVES
27100	;	KIFIX A,1(R);	;	;CHECK NOW FOR CORRECT STAFF
27200	;	CAME R2,A
27300	;	JRST GX;	;	;	;NOT THE ONE.
27400	
27500	;*	MOVE	1,1(R)		;RN(L+2)
27600	;;NEVER USED IN 'PARTS'-	CAML	R2,[=5.0]
27700	;;	JRST	GZ
27800	;PT	MOVE A,1(R)
27900	;;	SKIPE IPG		;IF(IPG)GO TO GSTF
28000	;;	JRST GSTF
28100	;;	KIFIX A,A
28200	;;	FLTR A,A		;STAFF=IFIX(STAFF)  DROPS DECIS.
28300	;PT	SKIPL IPG
28400	;PT	JRST G9
28500	;PTGSTF:	CAME	R2,A   		;FINDS STAFF #
28600	;PT	JRST 	GX
28700	;;GZ:	MOVE	A,.COMM.+7		;RY=RN(L+1)
28800	;;	JUMPLE	A,G9			;F(R6.LE.0)GO TO 9
28900	;;	CAME	A,(R)		;IF(R6.NE.RY)GO TO 1
29000	;;	JRST	GX
29100	;  CHECK CODE NUM
29200	;G9:	MOVE	A,2(R)
29300	;	CAMG;	A,.COMM.+6;	;R5  9;	IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
29400	;	CAMGE;	A,.COMM.+5;	;R4
29500	;	JRST;	G2
29600	
29700	;	SKIPG;	JJ2
29800	;	MOVE;	JJ2,X
29900	;	MOVE;	.COMM.+=8;	;IF(IPG)RN(L+2)=R7
30000	;	AOJ;	J,
30100	;  IN LIMITS?
30200	;;	MOVEI	A,XRN+=2498	;J=J+1
30300	;;	MOVEI	A,KNR-1
30400	;;	ADDI	A,(J)
30500	;	MOVEI;	0,(L)
30600	;	AOJ;	K,;	;	;K=K+1
30700	;	MOVEM;	0,NNP-1(K)
30800	;	ADDI;	0,3;	;	;N(J)=L+3
30900	;	MOVEM;	0,KNR-1(J)
31000	;  NP IS FOR USE IN JUSTIFY ROUTINE
31100	;G2:	KIFIX	RY,(R)	;2	IF(RY.LT.4)GO TO 1
31200	;	CAIN;	RY,2   ;	;IF(RY.EQ.2)GO TO GRST
31300	;	JRST GRST
31400	;	CAIGE;	RY,4
31500	;	JRST;	GX
31600	;	MOVE;	RZ,-1(R);	;RZ=RN(L)     WD CNT
31700	;	CAIE;	RY,=44;	;CODE 4 IS SOMETIMES =44
31800	;	JRST .+4
31900	;	CAMG RZ,[2.0];	  ;IF(RZ.LE.2)THEN IT'S AN CODE 44 BAR LINE.
32000	;	JRST GX
32100	;	JRST;	G5;	;	;FOUND A LINE
32200	;	CAILE;	RY,7
32300	;	JRST;	GX;	;	;IF(RY.GT.7)GO TO 1
32400	;  TWO-ENDED ITEM?
32500	;;	CAMN	RY,[=4.0]	;GO TO(4,5,6,7),IFIX(RY)-3
32600	;;	JRST	G4
32700	;;	CAMN	RY,[=5.0]
32800	;;	JRST	G5
32900	;;	CAMN	RY,[=6.0]
33000	;;	JRST	G6
33100	;;	CAMG	RZ,[=4.0]	;4	IF(RZ.GT.2)GO TO 5
33200	;;	JRST	G5		; THERE IS A TRILL WIGGLE
33300	;;	JRST	GX		;GO TO 1   -- NO WIGGLE (P7≠0)
33400	;	XCT TBL-4(RY);	; NEXT REPLACES THE ABOVE.
33500	;	JRST G5
33600	;	JRST GX
33700	;TBL:	JRST G4
33800	;	JRST G5
33900	;	JRST G6
34000	;	CAMG RZ,[4.0]
34100	
34200	;G4:	CAMG	RZ,[=3.0]	;7	IF(RZ.GT.3)GO TO 5
34300	;	JRST;	GX
34400	;	JRST;	G5;	;	;GO TO 1
34500	;GRST:	MOVE RZ,-1(R)		;FOR 'CENTERED' RESTS
34600	;	JRST G8
34700	;G6:	CAMGE	RZ,[=8.0]	;6	IF(RZ.LT.8)GO TO 8
34800	;	JRST;	G8
34900	;	SKIPL 6(R);	;IF(R7)GO TO 8
35000	;	SKIPN =9(R);	;IF(R10.EQ.0)GO TO 8
35100	;	JRST;	G8
35200	;;	MOVE	A,7(R)	  ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
35300	;;	JUMPE A,G5	;IF(R8.EQ.0)GO TO G5(MOVE ONLY P3,6)
35400	;	SKIPG A,7(R);	;	;IGNORE P8 IF IT IS 0 OR -
35500	;	JRST G8
35600	;	CAMG;	A,.COMM.+6
35700	;	CAMGE;	A,.COMM.+5
35800	;	JRST;	G8
35900	;	CAMLE JJ2,X
36000	;	MOVE;	JJ2,X
36100	;	AOJ;	J,    ;  IN LIMITS?
36200	;	MOVEI;	0,=8(L);	;	;J=J+1
36300	;	MOVEM 0,KNR-1(J)
36400	;G8:	CAML	RZ,[=7.0]	;8	IF(RZ.LT.7)GO TO 5
36500	;	SKIPG A,8(R);	; R9;	IF(R9.LE.0)GO TO G5
36600	;	JRST G5
36700	;	CAIE RY,2;	;IF(RY.EQ.2)GO TO GRST2  (NEW CENTERED RESTS)
36800	;	SKIPE 7(R);	; R8
36900	;	JRST GRST2
37000	;	SKIPL 6(R);	; R7
37100	;	JRST G5
37200	;GRST2:	CAMG	A,.COMM.+6
37300	;	CAMGE;	A,.COMM.+5;	;R4
37400	;	JRST;	G5
37500	
37600	;	CAMLE JJ2,X
37700	;	MOVE;	JJ2,X
37800	;	AOJ;	J,;	;	;J=J+1   ;  IN LIMITS?
37900	;	MOVEI;	0,=9(L)
38000	;	MOVEM 0,KNR-1(J);	;N(J)=L+9
38100	;G5:	CAIN	RY,2   	;IF(RY.EQ.2)GO TO GX  
38200	;	JRST GX  
38300	;	MOVE;	A,5(R)
38400	;	CAMG;	A,.COMM.+6
38500	;	CAMGE;	A,.COMM.+5;	;R4
38600	;	JRST;	GX
38700	
38800	;	CAMLE JJ2,X
38900	;	MOVE;	JJ2,X
39000	;	AOJ;	J,     ;  IN LIMITS?
39100	;|	MOVEI	A,XRN+=2498	;J=J+1
39200	;;	ADDI	A,(J)
39300	;	MOVEI;	0,6(L)  ;5;	IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
39400	;;	ADDI	0,6		;N(J)=L+6
39500	;	MOVEM;	0,KNR-1(J)
39600	;GX:	CAMGE	X,LLL		;1	CONTINUE
39700	;	AOJA;	M,G1
39800	;	MOVEM;	JJ2,POSI+=8
39900	;	MOVEM;	J,KJY+1
40000	;	MOVEM;	K,KJY
40100	;	JRA;	16,3(16)
40200	
40300	;	SUBROUTINE MOVIT(RN,NP,R4,R5,R8,R9)
40400	;	DIMENSION  NP(1),RN(1)
40500	;	COMMON  /KJY/ DONT,J
40600	;MOVIT:	0		;RDIS=(R9-R8)/(R5-R4)
40700	;	MOVE	R,@5(16)    
40800	;	FSBR	R,@4(16)    
40900	;	MOVE	RY,@3(16)   
41000	;	FSBR	RY,@2(16)   
41100	;	FDVR	R,RY
41200	;;	MOVEI	L,XRN+=2499	;	DO 1 K=1,J
41300	;	MOVEI	L,@1(16)	; GET NP ARRAY LOC
41400	;	SETZ	K,
41500	;	MOVE	0,@5(16)     	; SET UP R9
41600	;;;M1:	MOVE	X,L	       ;	L=NP(K)
41700	;M1:	MOVEI  	R2,@(16)	;RA=RN(L)
41800	;	ADD 	R2,(L)
41900	;	MOVEI	RZ,(R2)
42000	;	MOVE	R2,-1(R2)
42100	;	CAML	R2,@2(16)   	;IF(OUTLIM(R4,R5,RA))GO TO 1
42200	;	CAMLE	R2,@3(16)   
42300	;	JRST	MX
42400	;	JUMPE	0,M2	;IF(R9.NE.0)RA=(RA-R4)*RDIS
42500	;	FSBR	R2,@2(16)   
42600	;	FMPR	R2,R 
42700	;M2: 	FADR	R2,@4(16)    	;	RN(L)=R8+RA
42800	;	MOVEM	R2,-1(RZ)
42900	;MX:	AOJ	K,		;1	CONTINUE
43000	;	CAMGE	K,KJY+1
43100	;	AOJA	L,M1
43200	;	JRA	16,6(16)
43300	;
43400	;
43500	;EXTEN:	0	;FUNCTION EXTEN(X)
43600	;	HRRM	16,.+2
43700	;	JSA	16,AMOD	;EXTEN=AMOD(X,1.)*10.
43800	;	JUMP 	@0
43900	;	JUMP	[=1.0]
44000	;	FMPR	[=10.0]
44100	;	JRA	16,1(16)
44200	;
44300	;DBAR:	0	; CALL DBAR(K,ITEM,J)
44400	;	MOVE 4,@2(16)	; -J-RR=RN(J+3)
44500	;;PT	SKIPL IPG		;IF(IPG.GE.0)LEAVE BAR ALONE!
44600	;;;;	JRST DB1
44700	;;PT	KIFIX 2,XRN+3(4)		; -RN(J+4)-
44800	;	        		;KZ=RN(J+4)/100.
44900	;;PT	IMULI 2,=100		;RN(J+4)=1.+KZ*100.
45000	;
45100	;DB1:	MOVE 1,@1(16)
45200	;	MOVE 7,XRN+2(4)		; -RR-
45300	;	MOVE 4,@(16)	;	DO 82 KY=K+1,ITEM
45400	;DB:	MOVE 5,PTR(4)	;KZ=PWDS(KY)
45500	;	MOVE 6,XRN(5)	;	IF(RN(KZ+1).NE.4)GO TO 82
45600	;	CAME 6,[4.0]
45700	;	JRST DB82
45800	;	MOVE 6,XRN-1(5)	;IF(RN(KZ).GT.3)GO TO 82
45900	;	CAMLE 6,[3.0]
46000	;	JRST DB82
46100	;;;C  AVOIDS DUPLICATE BARS.
46200	;	MOVN 6,XRN+2(5)  ;IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82	
46300	;	FADR 6,7
46400	;	SKIPGE 6
46500	;	MOVNS 6
46600	;	CAMLE 6,[0.5]
46700	;	JRST DB82
46800	;	MOVE 6,[99.0]  ;RN(KZ+2)=99
46900	;	MOVEM 6,XRN+1(5)
47000	;	SETZM XRN(5)	;RN(KZ+1)=0
47100	;DB82:	AOJ 4,  ;82	CONTINUE
47200	;	CAIGE 4,(1)
47300	;	JRST DB
47400	;	MOVEM 7,DBX# 	; RR   SAVES IT FOR ADRST ROUTINE
47500	;	JRA 16,3(16)
47600	;
47700	;QRN:	0	; CALL QRN(J,XWDS,K)
47800	;	MOVE 4,@(16)	;810	JA=PWDS(K+1)
47900	;
48000	;PN4:	MOVE 5,@2(16)	;	DO 7 KY=J,JA-1
48100	;	MOVE 5,PTR(5)		; - JA -
48200	;	MOVE 6,XXX	;	PN(LK)=RN(KY)
48300	;	MOVEI 1,(6)		; SAVE IT FOR A LITTLE LATER
48400	;PN:	MOVE 7,XRN-1(4)	;7	LK=LK+1
48500	;	MOVEM 7,Q-1(6)
48600	;	AOJ 4,			;AC4 IS KY, AC6 IS LK
48700	;	CAME 4,5
48800	;	AOJA 6,PN
48900	;	SKIPN SF		;IF(KL.EQ.0)GO TO PN5
49000	;	JRST PN5
49100	;	MOVE [1.0]		;PUT A 1.0 AS RHYTHM FOR REST OR NOTE
49200	;	ADD 6,SF
49300	;	MOVEM Q-1(6)		;PUT IT IN PARAM 7 OR 9
49400	;PN5:	AOJ 6,
49500	;	MOVE 2,.COMM.+6		;	IF(R5)GO TO 6666
49600	;	JUMPL 2,PN2	;	IF(PN(J).EQ.2)LK=LK+1
49700	;	MOVEM 2,Q+4(1)		;	PN(J+5)=R5
49800	;	MOVE 3,[3.0]
49900	;PN3:	MOVE 4,3		; IS THE WDCNT BIG ENOUGH?
50000	;	FSBR 4,Q-1(1)
50100	;	KIFIX 4,4
50200	;	ADD 6,4		; UPDATE THE MAIN COUNTER
50300	;;PT???	SETZM Q+3(1)	; ZERO PARAM 4, THE VERTICAL POS.  PN(J+4)
50400	;	MOVEM 3,Q-1(1)		;	PN(J)=3 OR 4
50500	;	JRST PN1
50600	;PN2:	MOVE 3,RCLF	; IF(R.NE.17)GO TO
50700	;	CAME 3,[17.0]
50800	;	JRST PN1
50900	;	MOVE 3,[4.0]	; THE WDCNT
51000	;	MOVE 2,RCLF+1  	; CLEF #
51100	;	MOVEM 2,Q+5(1)		;PN(J+6)=CLEF
51200	;	JRST PN3
51300	;PN1:	MOVEM 6,XXX	;LK=LK+1		(6666↑)
51400	;	MOVE 4,LLL     	;  -L-  XWDS(L)=LK
51500	;	ADDI 4,@1(16)	; ADDR. XWDS ARRAY
51600	;	MOVEM 6,(4)
51700	;	AOS LLL        ;L=L+1
51800	;	JRA 16,3(16)
51900	;SORT:	0		; CALL SORT(XWDS)
52000	;	MOVE 11,LLL   	; L
52100	;	SOJ 11,
52200	;	MOVEI 4,1		;I=1
52300	;	MOVE 0,[16.0]
52400	;	MOVE 1,[8.0]
52500	;	SETZ 5,		; -K-  DO 243 K=1,L-1
52600	;S2:	MOVEI 7,@(16)	; ADDR. OF XWDS
52700	;	ADDI 7,(5)			;LB=XWDS(K)+1
52800	;	MOVE 6,(7)
52900	;;;	MOVE 10,Q(6)		;IF(PN(LB).NE.16)GO TO 243
53000	;;;	CAME 10,[16.0]
53100	;	CAME 0,Q(6)
53200	;	JRST S243
53300	;;;	MOVE 10,Q-1(6)		;IF(PN(LB-1).LT.8)GO TO 243
53400	;;;	CAMGE 10,[8.0]
53500	;	CAMLE 1,Q-1(6)
53600	;
53700	;	JRST S243
53800	;	MOVE 10,-1(7)		;JL=XWDS(K-1)
53900	;	MOVE 10,Q+2(10)
54000	;	MOVEM 10,Q+2(6)	;244	PN(LB+2)=PN(JL+3)
54100	;S243:	AOJ 5,
54200	;	CAME 5,11		; -L-1
54300	;	JRST S2			; 243    CONTINUE
54400	;
54500	;;; PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
54600	;;;  FOR SPACING PROBLEMS BELOW.
54700	;	MOVEI 11,1		;M=2
54800	;	SETZ 12,		;J=1
54900	;S24:	MOVE 13,[100000.0]	;24	RA=100000.;; POSITION
55000	;	MOVE 1,LLL   		; L
55100	;	SOJ 1,
55200	;	SETZ 14,		; -K-
55300	;S21:	MOVEI 2,@(16)		;DO 21 K=1,L-1  - ADDR. OF XWDS -
55400	;	ADDI 2,(14)		;JL=XWDS(K)+3
55500	;	MOVE 2,(2)
55600	;	MOVE 3,Q+2(2)		;R=PN(JL)
55700	;	CAMN 3,[100000.0]
55800	;	JRST SX21		;IF(R.EQ.100000)GO TO 21
55900	;	MOVE 3		;241	IF(ABS(R-RA).GT..1)GO TO 240
56000	;	FSBR 13
56100	;	SKIPGE
56200	;	MOVNS
56300	;	CAMLE 0,[0.1]
56400	;	JRST S240
56500	;	MOVEM 13,Q+2(2)	; ((R=RA))	PN(JL)=R
56600	;	JRST SX21	;GO TO 21;; PUT IN HERE MULTI-VOICE TRAP SOMEDAY
56700	;S240:	CAMLE 3,13		;240	IF(R.GT.RA)GO TO 21
56800	;	JRST SX21    ;; LINES THEM UP
56900	;	MOVEI 4,(2)		;	SAVES JL (I=K)
57000	;	MOVE 13,3  ; RA=R		;21	CONTINUE
57100	;SX21:	AOJ 14,		; -K-¬
57200	;	CAME 14,1
57300	;	JRST S21
57400	;	CAMN 13,[100000.0]	;IF(RA.EQ.100000)GO TO 23
57500	;	JRA 16,1(16);  JUMP IF ALL SORTED
57600	;;;;;	MOVE 10,(16)		;242	JL=XWDS(I)
57700	;	MOVEI 15,(4)		;LA=JL
57800	;	KIFIX 1,Q-1(4)		;N=PN(JL)+3
57900	;	ADDI 1,3		; N
58000	;	MOVE 2,PTR-1(11)	; PWDS(M)=PWDS(M-1)+N
58100	;	ADDI 2,(1)
58200	;	MOVEM 2,PTR(11)
58300	;	AOJ 11,		;	M=M+1
58400	;;;	FIXX(1)			;DO 22 K=J,J+N-1
58500	;	ADDI 1,(12)		; -J+N-
58600	;S22:	MOVE 2,Q-1(4)		;	RN(K)=PN(JL)
58700	;	MOVEM 2,XRN(12)
58800	;	AOJ 12,
58900	;	CAME 12,1
59000	;	AOJA 4,S22		;22   JL=JL+1
59100	;	AOJ 4,			; (JL=JL+1)
59200	;	MOVE 2,[100000.0]	;  PN(LA+3)=100000
59300	;	MOVEM 2,Q+2(15)		; PUT IT ASIDE
59400	;	JRST S24	;  	GO TO 24
59500	;
59600	;SHIFT:	0		; CALL SHIFT
59700	;	SOS LLL		; (IN MAIN.  L=L-1)
59800	;	SETZ 2,		;K=1
59900	;	SETZ 3,		;L=1
60000	;	SETO 4,		;LK=1  ((LL=0))
60100	;SH221:	MOVE 5,PX(2)	;221	IF(Q(IFIX(PN(K))+1))GO TO 321
60200	;	MOVE 6,Q(5)
60300	;	JUMPL 6,SH321
60400	;	MOVE 7,PX+1(2)
60500	;SH421:	MOVE 6,Q-1(5)		;DO 421	 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
60600	;	MOVEM 6,Q(3);	; ((LL=LL+1))421;	Q(LL)=Q(KL)
60700	;	AOJ 5,
60800	;	CAMGE 5,7
60900	;	AOJA 3,SH421
61000	;	AOJ 4,;	;	;LK=LK+1
61100	;	AOJ 3,
61200	;	MOVE 1,3;	;	;PN(LK)=LL+1
61300	;	AOJ 1,
61400	;	MOVEM 1,PX+1(4)
61500	;SH321:	AOJ 2,			;321	K=K+1
61600	;	CAMGE 2,LLL   ;	; (L) IF(K.LT.KK)GO TO 221
61700	;	JRST SH221
61800	;	AOJ 4,
61900	 ;	MOVEM 4,LLL   ;	; L=LK-1  ;; L=NUMBER OF ITEMS FOR RHY RECONS.
62000	;	JRA 16,(16)
62100	
62200	;SHFT1:	0		; CALL SHFT1(KQ)
62300	;	MOVEI 2,1;	;	; -L-  (KK=1)
62400	;	MOVEI 6,1;	;	; -K-
62500	;SP:	KIFIX 4,Q-1(6);	;	;220;	JJ=Q(K)+3
62600	;	ADDI 4,3
62700	;	MOVEM 6,PX-1(2)
62800	;;NEW POINTER
62900	;	MOVE Q(6);	;IF(Q(K+1).NE.2.OR.Q(K).LT.6)GO TO SPA
63000	;	CAME [2.0]
63100	;	JRST SPA
63200	;	MOVE [6.0]
63300	;	CAMLE Q-1(6)
63400	;	JRST SPA
63500	;	MOVEI 13,(4);	; JJ
63600	;	ADDI 13,(6);	; +K
63700	;	MOVE 3,Q(13);	;IF(Q(JJ+1).NE.10.OR.Q(JJ).LT.6)GO TO SPA
63800	;	CAMN 3,[10.0]
63900	;	CAMLE Q-1(13)
64000	;	JRST SPA
64100	
64200	;	SKIPN IPG;	;	;IF(IPG.EQ.0)GO TO SPA
64300	;	JRST SPA;	;do next only when extracting parts(IPG.NE.0)
64400	;	SETO 3,;	;	;M=0 (-1)
64500	;	KIFIX 5,Q-1(13);	; KK=Q(JJ)+2
64600	;	        ;	;DO SPB N=K,KK
64700	;	ADDI 5,2;	; KK
64800	;	MOVEI 7,(6);	; (N=K)
64900	;	ADDI 5,(7);	; (KK=K+KK+JJ-1)
65000	;	ADDI 5,(4)
65100	;;;	SOJ 5,;	;	; THE TOTAL NUM OF ITEMS TO SCRAMBLE
65200	;SPB:	MOVE Q-1(7)	;M=M+1
65300	;	AOJ 3,;	;	;  M
65400	;	MOVEM XRN(3);	;SPB;	RN(M)=Q(N)
65500	;	CAIGE 7,(5)
65600	;	AOJA 7,SPB
65700	
65800	;	MOVEI 3,(13);	; JJ
65900	;	SUB 3,6;	;	; M=JJ-K  (-1)
66000	;	MOVEI 7,(5);	; KK
66100	;	SUB 7,13;	;	; J=KK-JJ
66200	;	MOVEI 11,(7);	; KA=J
66300	;	ADDI 11,(6);	; +K
66400	;;;	SOJ 11,;	;	;KA=K+J-1
66500	;	MOVEI 12,(6);	; N=K
66600	;	MOVEI 14,(12)
66700	;	MOVE 15,XRN+3(3);	; SAVE POS (R3)
66800	;SPC:	MOVE XRN(3)	;DO SPB N=K,KA
66900	;	MOVEM Q-1(12);	; M=M+1
67000	;	AOJ 3,;	;	;SPC;	Q(N)=RN(M)
67100	;	CAIGE 12,(11)
67200	;	AOJA 12,SPC
67300	
67400	;	MOVEI 13,(6);	; JJ=K+J
67500	;	ADDI 13,(7);	; JJ
67600	;	SETZ 3,;	;	; M=0 
67700	;	SOJ 5,;	;	; KK-1
67800	;	MOVE 7,XRN+3(3);	; POS OF THIS ITEM
67900	;	MOVEM 7,Q+2(14);	;EXCHANGE THEM
68000	;	MOVEM 15,XRN+3(3)
68100	;SPD:	MOVE XRN(3)	;DO SPD N=JJ,KK-1
68200	;	MOVEM Q(13);	; M=M+1
68300	;	AOJ 3,;	;	;SPD;	Q(N)=RN(M)
68400	;	CAIGE 13,(5)
68500	;	AOJA 13,SPD;	; ALL THIS TO FIND NUM AFTER WHOLE REST.
68600	;	JRST SP;	;	;GO BACK TO GET RIGHT PNTRS NOW.
68700	;	;	;	;K=K+JJ
68800	;SPA:	ADDI 6,(4)	; -K- (KK=KK+1)
68900	;	CAMGE 6,@(16);	;	;IF(K.LT.KQ)GO TO 220
69000	 ;	AOJA 2,SP
69100	;	AOJ 2,      ;	;	;PN(KK)=K
69200	;	MOVEM 6,PX-1(2)
69300	;	MOVEM 2,LLL       ;L=KK
69400	;	JRA 16,1(16)
69500	
69600	
69700	;SHFT0:	0		; CALL SHFT0(KQ)
69800	;	MOVE 2,LLL   ;	;	;  L
69900	;	MOVE 4,PTR-1(2)
70000	;	SOJ 4,
70100	;	MOVE 2,@(16);	;	;  KQ
70200	;;	SETZ 3,			; K
70300	;;SH32:	MOVE XRN(3)	; DO 32 K=1,IFIX(PWDS(L))-1
70400	;;	MOVEM Q(2)	; KQ=KQ+1
70500	;;	AOJ 3,
70600	;;	CAME 3,4
70700	;;	AOJA 2,SH32
70800	;;	AOJ 2,		; 32  Q(KQ)=RN(K)
70900	;	HRLZI 3,XRN;	; PUT ADDR OF RN IN LEFT HALF
71000	;	HRRI 3,Q(2);	; ADDR OF NEXT OPEN SLOT OF Q IN RIGHT HALF
71100	;	ADDI 2,(4);	; TO LOCATE END OF TRANSFER
71200	;	BLT 3,Q(2);	; THESE REPLACE THE ';;' ABOVE
71300	;	MOVEM 2,@(16);	;	; NEW VALUE OF KQ
71400	;	MOVEI 1
71500	;	MOVEM LLL   ;	;	; L
71600	;	MOVEM XXX;	;	; LK
71700	;	JRA 16,1(16)
71800	
71900	;PSHFT:	0		; CALL PSHFT(I)
72000	;	MOVE 6,@(16)
72100	;	MOVEI 2,1
72200	;	MOVE 2,PX-1(2);	;;	DO 31 NA=1,I
72300	;	MOVE 3,PX(6);	;;	RN(KL)=Q(NA)
72400	;	;	;	; 31;	KL=KL+1
72500	;	MOVE 4,SF;	;	; KL
72600	;PS31:	MOVE 5,Q-1(2)
72700	;	MOVEM 5,XRN-1(4)
72800	;	AOJ 2,
72900	;	CAIE 2,(3)
73000	;	AOJA 4,PS31
73100	;	AOJ 4,
73200	;	MOVEM 4,SF;	;	;  PUT BACK NEW VALUE OF KL
73300	;	JRA 16,1(16)
73400	
73500	;	SUBROUTINE ADDRST(RPOS,XWDS,PN)
73600	;	COMMON /XXX/LK,LP,JY /PTR/PWDS(250),L,LL,I,IX
73700	;	COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
73800	;	DIMENSION XWDS(1),PN(1)
73900	
74000	;ADRST:	0		;	PN(LK)=6
74100	;	MOVE 1,XXX		; LK
74200	;	MOVE 6,[6.0]		;      CALL ADRST(XWDS,RR)
74300	;	MOVEM 6,Q-1(1)
74400	;	MOVE 2,[2.0]	;	PN(LK+1)=2
74500	;	MOVEM 2,Q(1)
74600	;;	MOVE 13,.COMM.		;	PN(LK+2)=RS
74700	;	SETZM Q+1(1)
74800	;	MOVE 3,DBX  		;	PN(LK+3)=RPOS-1.  (DBX SAVED 'RR')
74900	;	MOVEM 3,Q+=11(1)	;  SEE (LK+3) BELOW
75000	;	FSBR 3,[1.0]
75100	;	MOVEM 3,Q+2(1)
75200	;	SETZM Q+3(1)		;	PN(LK+4)=0   
75300	;	SETZM Q+4(1)		;	PN(LK+5)=0   
75400	;	SETZM Q+5(1)		;	PN(LK+6)=0   
75500	;	MOVEM 6,Q+6(1)		;	PN(LK+7)=6.  
75600	;	MOVE 10,[1.0];	PN(LK+8)=-1
75700	;	MOVNM 10,Q+7(1)
75800	;;	LK=LK+9
75900	;;	L=L+1
76000	;;	XWDS(L)=LK
76100	;; NEXT ADDS A BAR LINE
76200	;	MOVEM 2,Q+=8(1)	;	PN(LK)=2
76300	;	MOVE [4.0]		;	PN(LK+1)=4
76400	;	MOVEM Q+=9(1)
76500	;;;	MOVEM 13,PX+=10(1)	;	PN(LK+2)=RS
76600	;	SETZM Q+=10(1)
76700	;;	PN(LK+3)=RPOS		(SEE ABOVE)
76800	;	MOVE 10,@1(16)		;GET BAR LINE INFO
76900	;	MOVEM 10,Q+=12(1)	;	PN(LK+4)=RR
77000	;	MOVE 2,LLL   		; L
77100	;	HRRZI 3,@(16)		; ADDR OF XWDS
77200	;	ADDI 3,(2)
77300	;	ADDI 1,=9
77400	;	MOVE 4,1
77500	;	MOVEM 4,(3)		;XWDS(L)=LK
77600	;	ADDI 4,5
77700	;	MOVEM 4,1(3)		;XWDS(L+1)=LK
77800	;	ADDI 2,2
77900	;	MOVEM 2,LLL   	;L=L+2
78000	;	ADDI 1,5
78100	;	MOVEM 1,XXX		;LK=LK+14
78200	;	JRA 16,2(16)
78300	;
78400	;STAFF:	0    ;	SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8)
78500	;;;	COMMON/XRN/RN(2000) /SF/KL,RT,KP,RSTJ2,NAMX
78600	;;;	COMMON /PTR/PWDS(250),L,LL,I,IX
78700	;	MOVE 2,SF+2	; KP	PWDS(KP)=KL
78800	;	MOVE 4,SF	; KL
78900	;	MOVEI 3,(4)
79000	;	MOVEM 3,PTR-1(2)
79100	;	AOJ 2,		;	KP=KP+1
79200	;	MOVEM 2,SF+2
79300	;	MOVE 2,@(16)	;  RN(KL)=P0
79400	;	MOVEM 2,XRN-1(4)
79500	;	MOVE @1(16)	;  RN(KL+1)=P1
79600	;	MOVEM XRN(4)
79700	;	MOVE SF+1	;  RN(KL+2)=RT
79800	;	MOVEM XRN+1(4)
79900	;	MOVE @2(16)	;  RN(KL+3)=P3
80000	;	MOVEM XRN+2(4)
80100	;	MOVE @3(16)	;  RN(KL+4)=P4
80200	;	MOVEM XRN+3(4)
80300	;	MOVE @4(16)	;  RN(KL+5)=P5
80400	;	MOVEM XRN+4(4)
80500	;	CAMGE 2,[4.0]	;  IF(P0.LT.4.)GO TO 1
80600	;	JRST ST1
80700	;	MOVE @5(16)	;  RN(KL+6)=P6
80800	;	MOVEM XRN+5(4)
80900	;	MOVE @6(16)	;  RN(KL+7)=P7
81000	;	MOVEM XRN+6(4)
81100	;	MOVE @7(16)	;  RN(KL+8)=P8
81200	;	MOVEM XRN+7(4)
81300	;	MOVE @=8(16)	;  RN(KL+9)=P9
81400	;	MOVEM XRN+=8(4)
81500	;	MOVE @=9(16)	;  RN(KL+10)=P10
81600	;	MOVEM XRN+=9(4)
81700	;	MOVE @=10(16)	;  RN(KL+11)=P11
81800	;	MOVEM XRN+=10(4)
81900	;	MOVE @=11(16)	;  RN(KL+12)=P12
82000	;	MOVEM XRN+=11(4)
82100	;ST1:	KIFIX 2,2 	;1	KL=KL+P0+3.
82200	;	ADDI 2,3
82300	;	ADDM 2,SF
82400	;	JRA 16,=12(16)		; END
82500	
82600	;;;RIGHT:	0	;	FUNCTION RIGHT(NA,J)
82700	;;	COMMON /PX/PN(1800) /Q/Q(9000)
82800	;;;	MOVE 4,@(16)		;  NA  K=NA+J
82900	;;;	ADD 4,@1(16)		; +J     J IS EITHER +1 OR -1
83000	;;;	MOVE 5,[16.0]
83100	;;;RT1:	MOVE 3,PX-1(4)		; 1	L=PN(K)
83200	;;	MOVE Q(3)		; IF(Q(L+1).NE.16)GO TO 2
83300	;;	CAME [16.0]		; **** CAN'T USE AC2 - USED IN FORTRAN
83400	;;;	CAME 5,Q(3)
83500	;;;	JRST RT2
83600	;;;	ADD 4,@1(16)		; K=K+J
83700	;;;	JRST RT1		; GO TO 1
83800	;;;RT2:	MOVE Q+2(3)		; 2	RIGHT=Q(L+3)
83900	;;;	JRA 16,2(16)		; END
84000	;RIGHT:	0		;FUNCTION RIGHT(NA,J,JK)
84100	;	MOVE 4,@(16)
84200	;	MOVE 6,4
84300	;	MOVE 11,@1(16)	; SAVE J IN 11
84400	;	ADD 4,11	;  K=NA+J      J= +1 OR -1
84500	;	SKIPLE 4	; IF(K.GT.0)GO TO RT4
84600	;	JRST RT4
84700	;	MOVE 0,Q+3	;RIGHT=Q(JK+3)
84800	;	JRA 16,3(16)	;RETURN
84900	;RT4:	MOVEI 5,Q	; Q	R=Q(JK+2)
85000	;	ADD 5,@2(16)
85100	;	MOVE 12,2(5)	; RX=Q(JK+3)-2   CURRENT POS. OF REST-2
85200	;;;;	FSBR 12,[2.0]	; NEEDED IF NOTHING FOUND TO LEFT.
85300	;	MOVE 5,1(5)	;R  THE STAFF NUM.
85400	;	MOVEI 8,1	;JX=1       FOR REVERSE LOOP
85500	;	SKIPL @1(16)	;IF(J.GT.0)JX=I    FORWARD LOOP
85600	;	MOVE 8,LLL+2
85700	;RT1:	JSA 16,CODEN	;	DO 134 K=NA-1,1,-1
85800	;	JUMP PX		;	R8=CODEN(KPN,K,Q,LL)
85900	;	JUMP 4
86000	;	JUMP Q
86100	;	JUMP 7		;LL
86200	;	CAMN 0,[4.0]	;	IF(R8.EQ.4)GO TO 234
86300	;	JRST RT2
86400	;  	MOVE 3,Q+1(7)	;	IF(Q(LL+2).NE.R)GO TO 134
86500	;  	CAME 3,5
86600	;  	JRST RT3
86700	;	CAME 0,[18.0]	;  	IF(R8.EQ.18.OR.R8.EQ.17)GO TO 234
86800	;	CAMN 0,[17.0]	;	JUMP ON KEY SIG OR METER
86900	;	JRST RT2
87000	;;;	CAML 0,[10.0]	;	IF(R8.GE.10)GO TO 134
87100	;;;	JRST RT3
87200	;;;	CAME 0,[3.0]	;	IF(R8.NE.3)GO TO 234
87300	;;;	JRST RT2
87400	;RT3:	CAMN 4,8	;134 	CONTINUE
87500	;	JRST .+3
87600	;	ADD 4,11
87700	;	JRST RT1
87800	;	SKIPG 11	;SKIP NEXT IF GOING FORWARD IN LOOP (LOOKING TO RIGHT)
87900	;	MOVE 0,12	;USE ITS OWN POS.-2 IF NOTHING FOUND TO LEFT
88000	;	SKIPA		;	RR=RX
88100	;RT2:	MOVE 0,Q+2(7)	;	C NOW FOUND ITEM TO LEFT OR RT ON THIS STAFF.
88200	;	JRA 16,3(16)	;234	RR=Q(LL+3)
88300	
88400	;RESTS:	0		;XLFT=0  -- CALL RESTS
88500	;	SETZ 2,
88600	;	MOVE 12,[4.0]
88700	;
88800	;	MOVE 13,[16.0]	; TO CATCH WORDS
88900	;	MOVN 3,[99.0]		;SIG=-99
89000	;;;	MOVE 4,3		;CLEF=-99
89100	;	SETZ 6,		;	REST=0
89200	;	MOVEI 7,1		;K=1
89300	;RX50:	MOVE 10,PX-1(7)		;50	JL=PN(K)
89400	;	MOVE 11,Q(10)		;R=Q(JL+1)
89500	;	JUMPN 2,RX5		;IF(XLFT.NE.0)GO TO 5
89600	;	CAMLE 11,[4.0]		;IF(R.LE.4)XLFT=Q(JL+3)
89700	;	JRST RX5
89800	;	MOVE 2,Q+2(10)
89900	;	MOVEM 2,.COMM.+=13
90000	;	JRST RX3
90100	;RX5:	CAME 11,[17.0]		;5	IF(R.NE.17)GO TO 3
90200	;	JRST RX3
90300	;	MOVE 1,Q+4(10)		;IF(Q(JL+5).EQ.SIG)GO TO 60
90400	;	CAMN 1,3
90500	;	JRST RX60
90600	;	MOVE 3,1		;SIG=Q(JL+5)
90700	;RX3:	CAME 11,[2.0]		;3	IF(R.NE.2)GO TO 231
90800	;	JRST RX231
90900	;	MOVE Q-1(10)		;IF(Q(JL).GE.6)GO TO 7
91000	;	CAML [6.0]
91100	;	JRST RX7
91200	;
91300	;	JRST RX231	;NEXT (TO RX7) DOESN'T WORK YET.  NEEDS TO EXPND DATA!
91400	;;	MOVE 1,PX-2(7)		;IF(Q(KPN(K-1))+1).NE.4)GO TO 231
91500	;;	CAMN 12,Q(1)
91600	;;	JRST RX55     ; ANY REST BETWEEN 2 BARS IS A "WHOLE" REST.
91700	;;	CAME 13,Q(1)
91800	;;	JRST RX231	; IF NOT WORDS, JUMP
91900	;;	MOVE 14,PX-3(7)
92000	;;	CAME 12,Q(14)	; IS THIS ONE A BAR?
92100	;;	JRST RX231	; NO
92200	; WON'T CATCH IT IF THERE IS A CLEF, METER, ETC. PRESENT
92300	;;RX55:	MOVE 1,PX(7)		;IF(Q(KPN(K+1))+1).NE.4)GO TO 231
92400	;;	CAME 12,Q(1)
92500	;;	JRST RX231
92600	; FOUND A WHOLE REST MEAS.
92700	
92800	;;RX8:	MOVE 11,[3.0]	;Q(JR)=3  (P7=3)
92900	;;	MOVE 13,PX-1(7)	;JR=JL+7
93000	;;	ADDI 13,6
93100	;;	CAMLE 12,Q(13)	;IF(Q(JR+1).GT.4)GO TO RX9
93200	;;	JRST RX9
93300	;;	MOVNM 11,Q-3(13)	;Q(JR-2)=-3  P5=-3 =DBL WHOLE REST
93400	;;	MOVE [8.0]	;IF(R.LT.8)GO TO RX9
93500	;;	CAMGE Q(13)
93600	;;	JRST RX9
93700	;;	MOVE 11,Q(13)	;Q(JR-1)=IFIX(R/4.0)+2.0
93800	;;	FDVR 11,12
93900	;;	KIFIX 11,11
94000	;;	FLTR 11,11
94100	;;	FADR 11,[2.0]
94200	;;RX9:	MOVEM 11,Q(13)
94300	;;	JRA 16,(16)	;RETURN
94400	
94500	;RX7:	MOVN Q+7(10)	;IF(Q(JL+8).LE.-4)GO TO 231
94600	;	SKIPLE Q+6(10)	;IF(Q(JL+7).LE.0)GO TO 231 (IGNORE NON-RHYTH.)
94700	;	CAML [4.0]	;CATCH BAR REPEAT SIGN
94800	;	JRST RX231
94900	;	JUMPE RX231	;IF(Q(JL+8).EQ.0)GO TO 231 (WHOLE REST OVER CUE NOTES)
95000	;	JUMPN 6,RX6		;7	IF(REST.NE.0)GO TO 6
95100	;	MOVEI 13,(10)		;JR=JL+8
95200	;	ADDI 13,6
95300	;;  POINTER TO REST NUM.
95400	;	MOVE 11,Q(13)		;R=Q(JR-1)
95500	;	CAMGE 11,[5.0]		;IF(R.LT.5)R=5
95600	;	MOVE 11,[5.0]
95700	;	FMPR 11,[0.6]		;Q(JR-1)=R*.6
95800	;	MOVEM 11,Q(13)
95900	;;  REDUCE SIZE OF REST'S TIME SO IT WILL TAKE LESS SPACE.
96000	;RX6:	FADR 6,[1.0]		;6	REST=REST+1
96100	;	MOVEM 6,Q+1(13)		;Q(JR)=REST
96200	;	MOVN [2.0]
96300	;	MOVEM Q-3(13)		;Q(JR-4)=-2  (LOWER THE REST'S POS.)
96400	;	MOVEI 10,(7)		;JL=K+2
96500	;	ADDI 10,2
96600	;	CAML 10,LLL		;IF(JL.GE.L)RETURN
96700	;	JRA 16,(16)
96800	;	MOVE 14,PX-1(10)	;LB=KPN(JL)
96900	;	MOVE Q(14)		;IF(Q(LB+1).NE.2)GO TO 233
97000	;	CAME [2.0]
97100	;	JRST RX233	; NEXT IS TO COMBINE MEASURES OF REST
97200	;	MOVE Q-1(14)		;IF(Q(LB).LT.6)GO TO 233
97300	;	CAMGE [6.0]
97400	;	JRST RX233
97500	;;  SKIP NON-WHOLE RESTS
97600	;	MOVE 15,PX-2(10)	;N=KPN(JL-1)
97700	;;;	MOVE Q(15)		;IF(Q(N+1).NE.4)GO TO 233
97800	;	CAME 12,Q(15)
97900	;	JRST RX233
98000	;;  IS REST FOLLOWED BY A BAR?	OR RHRSL NUM?(COULD BE A PROB. HERE!!!)
98100	;; SO IT WON'T BE FOUND NEXT TIME AROUND.
98200	;	MOVN	[1.0]		;Q(LB+1)=-1
98300	;	MOVEM Q(14)    ;  CHANGE CODE #
98400	;	MOVEM Q(15)		;Q(N+1)=-1 
98500	;	MOVEI 7,(10)		;K=JL
98600	;	JRST RX6		;GO TO 6
98700	;RX60:	MOVE [1.0]		;60	Q(JL+1)=-1
98800	;	MOVNM Q(10)
98900	;	JRST RX231		;GO TO 231
99000	;RX233:	SETZ 6,			;233	REST=0
99100	;RX231:	AOJ 7,			;231	K=K+1
99200	;	CAMGE 7,LLL		;IF(K.LT.L)GO TO 50
99300	;	JRST RX50
99400	;	JRA 16,(16)		; END
     

00100	;EXCHG:	0		;CALL EXCHG(MM(J),NN(J))
00200	;	HRRZI 1,@(16)	; ADDR OF MM(J)
00300	;	MOVE 2,1(1)	;VALUE OF MM(J+1)
00400	;	EXCH 2,@(16)	;EXCHANGE
00500	;	MOVEM 2,1(1)	; MM(J+1)
00600	;	HRRZI 1,@1(16)	; ADDR OF NN(J)
00700	;	MOVE 2,1(1)	;VALUE OF NN(J+1)
00800	;	EXCH 2,@1(16)	;EXCHANGE
00900	;	MOVEM 2,1(1)	; NN(J+1)
01000	;	JRA 16,2(16)
01100	;
01200	;EXCH:	0
01300	;	MOVE @(16)
01400	;	EXCH @1(16)
01500	;	MOVEM @(16)
01600	;	JRA 16,2(16)
01700	;
01800	;INMUS:	0		;CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
01900	;	MOVE 1,@(16)
02000	;	MOVE 2,@1(16)
02100	;	JSA 16,GETEXT  	
02200	;	JUMP 1    	;NAME
02300	;	JUMP 2 		;EXT
02400	;	MOVE 11,4(16)	;LOC OF RSTFAC ARRAY
02500	;	MOVE 12,3(16)	;LOC OF KWDS ARRAY
02600	;	JSA 16,EXTIN  	;ACCEPT 2,NAM
02700	; 	JUMP @11	;	CALL GETEXT(NAM,'MS')
02800	;	JUMP [=20]	;READ ONLY 20 WDS IN PAGE ONLY****** NOT [=128]  
02900	;	MOVE 15,2(16)	;LOC OF RN ARRAY
03000	;I1:	JSA 16,EXTIN  	;CALL EXTIN(R,JJ)
03100	;	JUMP @15	;JUMP @R
03200	;	JUMP =18(11)	;WDS    	;THE WD CNT.
03300	;	MOVE @15	;@R		;IF(R(1).NE.INTEGER 1)GO TO I3
03400	;	CAIE 1		;OLD FORMAT ?
03500	;	JRST I3		;NO
03600	;	USETI 12,2	;YES, READ 2ND RECORD AGAIN   (12 =CH)
03700	;	JSA 16,EXTIN  	;CALL EXTIN(RS,128)
03800	;	JUMP @12	;JUMP @KW
03900	;	JUMP =17(11)	;JUMP NWDS    	;CALL EXTIN(K,J)
04000	;	JRST I1		;GO BACK AND GET R ARRAY
04100	;I3:	MOVEI 1,1  	;3	N=1     ;KK(NN)=N
04200	;	MOVEM 1,(12)	;K(1)=1  	
04300	;	MOVEI 5,1
04400	;I4:	ADD 15,5  	;4	N=N+R(N)+3       HERE'S THE LOOP 
04500	;	KIFIX 5,-1(15)  ;GET WD CNT -2
04600	;;;	SKIPG 5		;LEAVE IF NUM. IS .LE.0
04700	;;;	JRA 16,5(16)
04800	;I5:	ADDI 5,3   	;NN=NN+1
04900	;	ADD 1,5
05000	;	AOJ 12,      		;UPDATE THE COUNTER OF THE POINTER LIST
05100	;	MOVEM 1,(12)         	;KK(NN)=N
05200	;	CAMGE 1,=18(11)         ;IF(N.LT.JJ)GO TO 4
05300	;	JRST I4
05400	;	JRA 16,5(16)
     

00100	;RCURVE:	0	;   R7=RCURVE(R3)
00200	;	MOVEI 2,@(16)	;	R7=2.0+(R6-R3)/25.+ABS(R4-R5)/10.
00300	;	MOVE 1,3(2)
00400	;	FSBR 1,(2)		;R6-R3
00500	;	MOVE 3,5(2)		;IF(R8.LT.-1)Z=Z+R8*2.
00600	;	FADR 3,[1.0]
00700	;	JUMPGE 3,RCRV		;R8=-2=BETWEEN NOTES, =-3=1ST NOTE IS DOTTED.
00800	;	FADR 3,3    
00900	;	FADR 1,3
01000	;RCRV:	FDVR 1,[25.0]		; /25.
01100	;	MOVE 0,2(2)
01200	;	FSBR 0,1(2)		;R5-R4
01300	;	MOVMS			;ABSOLUTE VALUE
01400	;	FDVR 0,[10.0]		; /10.
01500	;	FADR 0,1
01600	;	FADR 0,[2.0]		; +2.0   (THIS IS + .9 IN MS)
01700	;	SKIPGE 4(2)		;IF(R7 WAS .LT.0)KEEP IT NEGATIVE.
01800	;	MOVNS
01900	;	JRA 16,1(16)
02000	;
02100	;SHRNK:	0		;CALL SHRNK(K,IT)
02200	;	MOVE 10,@1(16)
02300	;	MOVE 11,PX(10)	;END OF Q DATA
02400	;	SOJ 10,
02500	;	MOVE 2,@(16)	;K
02600	;	MOVEI 12,(2)
02700	;	MOVE 3,PX-1(2)	;PTR TO Q(n)
02800	;	MOVEI 6,(3)	;SAME
02900	;	MOVE 13,Q+2(3)	;POS. OF CLEF TO BE REMOVED.
03000	;	MOVE 4,PX(2)	;PTR TO NEXT ITEM
03100	;	MOVEI 1,(4)	;TO USE IN BLT
03200	;	SUBI 3,(4)	;WDCCNT OF DELETE ITEM
03300	;	SUB 4,PX+1(2)	; NEXT +1
03400	;	SUB 3,4		; AMOUNT OF CHANGE
03500	;SK:	MOVE 5,PX+1(2)
03600	;	SUB 5,PX(2)
03700	;	ADD 5,PX-1(2)
03800	;	MOVEM 5,PX(2)
03900	;	CAIE 2,(10)
04000	;	AOJA 2,SK
04100	;	MOVE 2,PX(2)	; LAST PTR
04200	;	MOVE 7,Q+2(6)	;POS FOR LATER "MOVE"
04300	;SK2:	MOVE Q-1(1)
04400	;	MOVEM Q-1(6)
04500	;	AOJ 1,
04600	;	CAIE 1,(11)
04700	;	AOJA 6,SK2
04800	;	MOVEM 10,@1(16)
04900	;	MOVEM 10,LLL+2	;I=LEND (FOR FINAL ENDPOINT)
05000	;;;	AOJ 10,		; TO GET TO END OF DATA.
05100	;	MOVEM 7,.COMM.+5	;R4
05200	;SKMV:	SETZM LLL+1	;LL=0 (NO JUSTIFY)
05300	;	MOVE 2,[200.0]
05400	;	MOVEM 2,.COMM.+6	;R5
05500	;	SETZM .COMM.		;RS
05600	;	MOVEM 2,.COMM.+=10	;R9=R5
05700	;	SETZM .COMM.+=8		;R7
05800	;	MOVEM 13,.COMM.+=9	;R8=EXPAND REMAINDER OF LINE TO CLEF POS.
05900	;	JSA 16,PTMOVE
06000	;	JUMP Q
06100	;	JUMP PX-1(12)
06200	;	JRA 16,2(16)
06300	
06400	;EXPND:	0	; TO SHIFT LINE TO RT. WHEN ADDING KSIG.
06500	;	MOVE 5,[5.0]
06600	;	MOVE 2,[7.1]
06700	;	FMPR 2,STF+=8
06800	;	MOVEM 2,.COMM.+5	;R4=7*RSTJ2+.1
06900	;	MOVE 12,@(16)	; GET PTR TO PX
07000	;	ADDI 12,2	; ADD 2 (FOR NOW, ANYWAY)
07100	;	SETZM .COMM.+=9
07200	;	JRST SKMV	; GO MOVE IT
07300	
07400	;CLFNUM:;	0;	;X=CLFNUM(Q,PX,MS)  (FUNCTION)
07500	;	MOVEI 2,@1(16);	;GET PX'S ADDR
07600	;	ADD 2,@2(16)
07700	;	MOVE 2,(2);	;PX(MS)
07800	;	MOVEI 1,@(16);	; ADDR OF Q
07900	;	ADD 2,1;	;	;ADDR OF Q(PX(MS)+1)
08000	;	MOVE 5(2);	;X=Q(PX(MS)+5)
08100	;	MOVE 1,-1(2)
08200	;	CAMGE 1,[3.0];	;IF (Q( ).LT.3)X=0
08300	;	SETZ;	;	; ANSWER IN AC0
08400	;	JRA 16,3(16)
08500	
08600	;SLRV:;	0;	;	; CALL SLRV(KK,C)
08700	;	MOVE 1,@(16);	; KK
08800	;	MOVE 2,@1(16);	; C
08900	;	FADRM 2,Q+3(1);	; WORKS WITH Q ARRAY ONLY******
09000	;	FADRM 2,Q+4(1);	; FOR Q(KK+4) AND (KK+5)
09100	;	MOVNS Q+6(1);	; Q(KK+7)
09200	;	JRA 16,2(16)
09300	
09400	;CLEFN:;	0
09500	;	MOVEI 3,@(16);	;	;FUNCTION CLEFN(Q,J)
09600	;	ADD 3,@1(16);	;Q(J+1) NOW
09700	;	MOVE 2,-1(3);	;	;IF(Q(J).LT.3)RR=0
09800	;	SETZ 0,
09900	;	CAML 2,[3.0]
10000	;	MOVE 0,4(3)
10100	;	JRA 16,2(16)
10200	;;	CAMGE 0,[100.0]
10300	;;	JRA 16,2(16);	;	;IF(Q(J+5).LT.100)RR=Q(J+5)
10400	;;	JSA 16,AMOD
10500	;;	JUMP 4(3);	;	;ELSE RR=AMOD(Q(J+5),100.0)
10600	
10700	;MMNN:;	0;	;	;	;CALL MMNN(K)
10800	;	MOVEI 2,1;	;	;N=N+1
10900	;	ADDB 2,JN+1;	;	;NN(N)=0
11000	;;;;;	SETZM XRN+=499(2)
11100	;	MOVE @(16);	;	
11200	;	CAIE 0,3;	;	;IF(K.NE.3)NN(N)=-1   FOR SECONDARY POSITIONS.
11300	;	SETOM XRN+=499(2)
11400	;	ADD JN;	;	;	;MM(N)=J+K
11500	;	MOVEM XRN-1(2)
11600	;	JRA 16,1(16)
11700	
11800	;CODEN:;	0;	;	;FUNCTION CODEN(K,N,R,M)
11900	;	MOVE 1,@1(16);	;PNTR TO K ARRAY
12000	;	SOJ 1,
12100	;	ADDI 1,@(16);	;ADD LOC OF K ARRAY
12200	;	MOVE 1,(1);	;GET PNTR TO R ARRAY
12300	;	MOVEM 1,@3(16);	;SEND IT BACK IN M
12400	;	ADDI 1,@2(16);	;ADD LOC OF R ARRAY
12500	;	MOVE (1);	;R(M+1)  (CODE NUM OF ITEM)
12600	;	JRA 16,4(16)
12700	;	
12800	;ZERO:;	0  ;	;	;FUNCTION ZERO(X,Y)
12900	;	MOVE @(16);	;ZERO=X-Y
13000	;	FSBR @1(16)
13100	;	SKIPGE    ;	;IF(ABS(ZERO).LT..01)ZERO=0
13200	;	MOVNS
13300	;	CAMG 0,[0.01]
13400	;	SETZ 0,
13500	;	JRA 16,2(16);	;END
13600	
13700	; DO NEXT IF MORE THAN 1 STAFF(KPG) AND DIFF. SIZE FACTORS ARE FOUND.
13800	;BARFAC:;	0;	;	;CALL BARFAC(KPG,BFAC,JK)  R=RSTFAC(1)
13900	;	MOVE 10,STF;	;   DO 5112 K=2,KPG
14000	;	MOVEI 2,1
14100	;BA:;	CAME 10,STF(2);	;5112;	   IF(R.NE.RSTFAC(K))GO TO 6112
14200	;	JRST BB
14300	;	AOJ 2,;	
14400	;	CAML 2,@(16)
14500	;	JRA 16,3(16);	;  GO TO 3112 -- RETURN
14600	;	JRST BA
14700	; NEXT TO FIND PROBABLE SIZE FACTOR FOR THIS BAR. (NOT FOR PARTS)
14800	;  FIND LINE WITH MOST ACTIVITY.
14900	;  ALL THIS SORT OF WORKS.  SOMEDAY REVIEW IT.********
15000	;BB:;	MOVEI 2,7;	;6112;	   DO 1112 K=1,8
15100	;BC:;	SETZM XRN(2)
15200	;	SOJGE 2,BC;	;1112;	   RN(K)=0
15300	;	MOVE 2,@2(16);	;   DO 112 K=JK,J-1
15400	;	MOVE 7,[7.0]
15500	;;;	MOVE 5,[5.0];;;;; WE COUNT ALL RESTS, EVEN WITH NO RHYTHM.
15600	;BD:;	MOVEM 2,KBD#;	;'KBD' WILL BE 'K'
15700	;	JSA 16,CODEN;	;   R=CODEN(KPN,K,Q,JD)
15800	;	JUMP PX;	;	; /PX/ IS KPN
15900	;	JUMP KBD ;	; 'K'
16000	;	JUMP Q
16100	;	JUMP JD# ;	;  'JD'
16200	;	CAMLE [3.0] ;	;;	   IF(R.GT.3.)GO TO 112
16300	;	JRST B112
16400	;	MOVE 4,[1.0];	;;	   A=1.0
16500	;	CAMN [2.0];	; CHECKS FOR NUMBER OF NOTES, RESTS, CLEFS.
16600	;	MOVE 4,[0.6];	;AC0 IS R      IF(R.EQ.2)A=0.6
16700	; SKIP NON-RHYTHM CHORD NOTES.   RESTS ARE CONSIDERED LESS IMPORTANT.
16800	;	MOVE 11,JD  ;	; GET POINTER TO ITEM IN Q ARRAY
16900	;	CAME [1.0];	;   IF(R.NE.1)GO TO 4112
17000	;	JRST B4112
17100	;	CAMG 7,Q-1(11);	;   IF(Q(JD).LT.7)GO TO 112
17200	;	SKIPG Q+8(11);	;   IF(Q(JD+9).LE.0)GO TO 112
17300	;	JRST B112
17400	;B4112:;	KIFIX 12,Q+1(11);	;4112;	   LF=Q(JD+2)+1
17500	;	FADRM 4,XRN(12);	        ;  RN(LF)=RN(LF)+A 
17600	;B112:;	AOJ 2,;	;	;	;112;	   CONTINUE
17700	;	CAMGE 2,JN;	;	;/JN/ IS J
17800	;	JRST BD
17900	;	SETZ  2, ;	;	;;	   JD=1
18000	;	MOVE 3,XRN;	;	;   B=RN(1)*RSTFAC(1)
18100	;	FMPR 3,STF
18200	;	MOVEI 4,1;	;	; ;	   DO 2112 K=2,KPG
18300	;BE:;	MOVE 5,XRN(4);	;	;   A=RN(K)*RSTFAC(K)
18400	;	FMPR 5,STF(4)
18500	;	CAMG 5,3;	;	;    ;	   IF(A.LE.B)GO TO 2112
18600	;	JRST B2112
18700	;	MOVE 2,4;	;	; (-1)   JD=K
18800	;	MOVE 3,5;	;	;   B=A
18900	;B2112:;	AOJ 4,;	;	;	;2112;	   CONTINUE
19000	;	CAME 4,@(16)
19100	;	JRST BE
19200	;	MOVE 2,STF(2);	;	;   BFAC=BFAC*(RSTFAC(JD)+.1)
19300	;	FADR 2,[0.1];	; +.1 ABOVE TO MINIMIZE DIFF. IN SIZE FACTOR.
19400	;	FMPRM 2,@1(16)
19500	;	JRA 16,2(16);	;	;RETURN
19600	
19700	; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
19800		CH3←12
19900		CH2←11
20000		BLKS←←=1
20100	
20200	;CALL PUTEXT(<FILE>,<EXT>)
20300	
20400	PUTEXT:	0	;USES EXTOUT,FINEXT, CH2
20500		MOVE 0,@0(16)
20600		MOVEM 0,FILNAM
20700		MOVE 0,@1(16)
20800		MOVEM 0,EXTNAM
20900		JSA 16,INTFIL
21000		SETZM DIR+2
21100		SETZM DIR+3
21200		ENTER CH2,DIR
21300		ERROR <ENTER FAILED>
21400		JRA 16,2(16)
21500	
21600	;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
21700	
21800	EXTOUT:	0
21900		HRRZI 0,@0(16)
22000		SUBI 0,1
22100		MOVEM 0,COM
22200		MOVN 0,@1(16)
22300		HRLM 0,COM
22400		OUTPUT CH2,COM
22500		STATZ CH2,740000
22600		ERROR <WRITE ERROR>
22700		JRA 16,2(16)
22800	
22900	
23000	INTFIL:	0	;INITS DSK 
23100		MOVEI REGS
23200		BLT REGS+3
23300		INIT CH2,17
23400		SIXBIT/DSK/
23500		0
23600		ERROR <CAN'T INIT DSK!>
23700	EXTF4:	PUSHJ 17,INTF4
23800	;NEXT IS NEAR TOP OF FILE.********
23900	;INTF4:	MOVE 0,FILNAM#
24000	;	MOVEM 0,FN#
24100	;	MOVE 1,[POINT 7,FN]
24200	;INTF3:	MOVE 2,[POINT 6,DIR]
24300	;	SETZM DIR
24400	;	MOVEI 3,5
24500	;INTF1:	ILDB 0,1
24600	;	CAIN 0," "
24700	;	JRST INTF2
24800	;	SUBI 0,40
24900	;	IDPB 0,2
25000	;	SOJG 3,INTF1
25100	;INTF2:	HRLZI REGS
25200	;	BLT 3
25300		MOVE 0,EXTNAM#
25400		MOVEM 0,EX#
25500		MOVE 1,[POINT 7,EX]
25600	EXTF3:	MOVE 2,[POINT 6,DIR+1]
25700		SETZM DIR+1
25800		MOVEI 3,5
25900	EXTF1:	ILDB 0,1
26000		CAIN 0," "
26100		JRST EXTF2
26200		SUBI 0,40
26300		IDPB 0,2
26400		SOJG 3,EXTF1
26500	EXTF2:	HRLZI REGS
26600		BLT 3
26700		JRA 16,0(16)
26800	
26900	
27000	COM:	OCT 0,0
27100	COM1:	0
27200	BLKNUM:	0
27300	
27400	;CALL FINEXT
27500	FINEXT:	0
27600		CLOSE CH2,0
27700		STATZ CH2,740000
27800		ERROR <ERROR AFTER CLOSE>
27900		RELEASE CH2,0
28000		JRA 16,0(16)
28100	
28200	;CALL GETEXT(<FILE>,<EXT>)
28300	
28400	GETEXT:	0
28500		MOVE 0,@0(16)
28600		MOVEM 0,FILNAM
28700		MOVE 0,@1(16)
28800		MOVEM 0,EXTNAM
28900		JSA 16,INTFIZ
29000		SETZM DIR+3
29100		SETZM DIR+2
29200		LOOKUP CH3,DIR
29300		ERROR <LOOKUP FAILED>
29400		JRA 16,2(16)
29500	
29600	
29700	INTFIZ:	0	;INITS DSK FOR INPUT
29800		MOVEI REGS
29900		BLT REGS+3
30000		INIT CH3,17
30100		SIXBIT/DSK/
30200		0
30300		ERROR <CAN'T INIT DSK!>
30400		JRST EXTF4
30500	
30600	
30700	;CALL FASTI2(<ARRAY>,<NO. WORDS>)
30800	
30900	EXTIN:	0
31000		HRRZI 0,@0(16)
31100		SUBI 0,1
31200		MOVEM 0,COM
31300		MOVN 0,@1(16)
31400		HRLM 0,COM
31500		INPUT CH3,COM
31600		STATZ CH3,740000
31700		0
31800		JRA 16,2(16)
31900	           
32000		END